package org.jiamandan.com.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.io.Serializable;
import java.util.List;

/**
 * Netty配置属性类 - 增强版
 * 支持读、写、读写超时分别配置
 */
@Data
@ConfigurationProperties(prefix = "jmd.netty")
public class NettyProperties implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 单个端口配置（已废弃，使用ports代替）
     */
    @Deprecated
    private Integer port;

    /**
     * Boss线程数
     */
    private Integer bossThread = 2;

    /**
     * Worker线程数
     */
    private Integer workerThread = 8;

    /**
     * 读超时时间（秒）
     * 0表示不检测读超时
     */
    private Integer readerIdleTime = 60;

    /**
     * 写超时时间（秒）
     * 0表示不检测写超时
     */
    private Integer writerIdleTime = 0;

    /**
     * 读写超时时间（秒）
     * 0表示不检测读写超时
     */
    private Integer allIdleTime = 0;

    /**
     * 旧的空闲时间配置（兼容旧版本）
     * @deprecated 使用 readerIdleTime, writerIdleTime, allIdleTime 代替
     */
    @Deprecated
    private Integer idleTime;

    /**
     * 连接超时时间（毫秒）
     */
    private Integer connectTimeout = 5000;

    /**
     * 监听端口列表
     */
    private List<Integer> ports;

    /**
     * 是否启用心跳检测
     */
    private Boolean enableHeartbeat = true;

    /**
     * 心跳失败最大次数（超过此次数断开连接）
     */
    private Integer maxIdleCount = 3;

    /**
     * 获取读超时时间（兼容旧配置）
     */
    public Integer getReaderIdleTime() {
        if (readerIdleTime != null) {
            return readerIdleTime;
        }
        // 兼容旧的idleTime配置
        return idleTime != null ? idleTime : 60;
    }

    /**
     * 获取写超时时间
     */
    public Integer getWriterIdleTime() {
        return writerIdleTime != null ? writerIdleTime : 0;
    }

    /**
     * 获取读写超时时间
     */
    public Integer getAllIdleTime() {
        return allIdleTime != null ? allIdleTime : 0;
    }
}